//package jp.co.irep.techdev.techg.techt.juten.web.bean;
//
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.io.Serializable;
//import java.io.UnsupportedEncodingException;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.ArrayList;
//import java.util.Formatter;
//import java.util.List;
//import javax.inject.Named;
//import jp.co.irep.juten.utils.Consts;
//import org.primefaces.context.RequestContext;
//
//@Named
//public class ManagementControllerBean{
//
//    /**
//     * 
//     */
//     
//    private int flag;
//    private final List<String> roleList = Consts.ROLE;
//    public void clickEditBtn() {
//        String er = checkInputPopUp();
//        if (er.equals("")) {
//            setFlag(2);
//            updateUser();
//        } else {
//            setNotifyUpdating(er.replaceAll("\\n", "<br></br>"));
//        }
//        RequestContext request = RequestContext.getCurrentInstance();
//        request.execute("window.open('edit.jsf','ユーザー変更','width=400','height=600')");
//
//    }
//
//    public void openPopUp() {
//        setFlag(0);
//        reset();
//        setUname(getSelectedUser().getUname());
//        setIp(getSelectedUser().getIp());
//        RequestContext request = RequestContext.getCurrentInstance();
//        request.execute("window.open('edit.jsf','ユーザー変更','width=600','height=900')");
//    }
//
//    public void deleteUser() {
//        setNotifyDeletion("");
//        setUname("");
//        setIp("");
//        if (getSelectedUser() != null) {
//            getLoginUserService().deleteUser(getSelectedUser());
//            setNotifyDeletion(getSelectedUser().getUname() + "削除されました。");
//        }
//    }
//
//    private String checkInputPopUp() {
//        String err = "";
//        // ログイン
//        err += checkUserId();
//        // 元パスワードチェック
//        if (getUpass().equals(""))
//            err += "パスワードを入力してください。";
//        else if (!encryptPassword(getUpass()).equals(
//                getSelectedUser().getUpass())) {
//            err += "パスワードは正しく入力してください。\n";
//        }
//        // 新しいパスワードチェック
//        err += checkPasswordMatching();
//        // ホストアドレスは全角を含むかどうかチェック
//        if (includeZenkaku(getIp())) {
//            err += "ホストアドレスを半角で入力してください。\n";
//        }
//        return err;
//    }
//
//    /**
//     * 数字、小文字、大文字含むかどうかと長さチェック
//     */
//
//    public String checkPasswordFormat(String s) {
//        String e = "";
//        if (!s.matches(".*\\d.*") || !s.matches(".*[A-Z].*")
//                || !s.matches(".*[a-z].*")) {
//            e += "パスワードは数字、小文字、大文字が必要です。\n";
//        }
//        if (s.length() < 8)
//            e += "パスワードの最小長さは8桁です。\n";
//        return e;
//    }
//
//    public String checkPasswordMatching() {
//        String err = "";
//        if (getUpass1().equals("")) {
//            err += "新しいパスワードを入力してください。\n";
//        }
//        if (getUpass2().equals("")) {
//            err += "確認パスワードを入力してください。\n";
//        }
//        if (!getUpass1().equals("") && !getUpass2().equals("")) {
//            // 新しいパスワードと確認パスワードは統一かどうかチェック
//            if (!getUpass1().equals(getUpass2())) {
//                err += "新しいパスワードと確認パスワードは統一ではありません。\n";
//            }
//            // 新しいパスワードと確認パスワードのフォーマットは正しいかどうかチェック
//            if (!checkPasswordFormat(getUpass1()).equals("")) {
//                err += checkPasswordFormat(getUpass1());
//            } else if (!checkPasswordFormat(getUpass2()).equals("")) {
//                err += checkPasswordFormat(getUpass2());
//            }
//        }
//        return err;
//    }
//
//    /**
//     * インプットは全角だかどうかチェック
//     * 
//     * @param str
//     * @return
//     */
//    public boolean isZenkaku(String str) {
//        // Regular expression.
//        return str.matches("[^ -~｡-ﾟ]*");
//    }
//
//    /**
//     * インプットは全角含むかどうかチェック
//     * 
//     * @param str
//     * @return
//     */
//    public boolean includeZenkaku(String str) {
//        boolean ret_val = false;
//        for (char ch : str.toCharArray()) {
//            char chs[] = new char[1];
//            chs[0] = ch;
//
//            String st = new String(chs);
//            if (isZenkaku(st)) {
//                ret_val = true;
//            }
//        }
//        return ret_val;
//    }
//
//    public boolean checkKanomoji(String str) {
//        return str.matches("[a-zA-Z0-9_]");
//    }
//
//    public boolean checkKanoUserId(String str) {
//        boolean ret_val = true;
//        for (char ch : str.toCharArray()) {
//            char chs[] = new char[1];
//            chs[0] = ch;
//
//            String st = new String(chs);
//            if (!checkKanomoji(st)) {
//                ret_val = false;
//            }
//        }
//        return ret_val;
//    }
//
//    public String checkUserId() {
//        String err = "";
//        if (getUname().equals("")) {
//            err += "ログインIDを入力してください。\n";
//        } else if (includeZenkaku(getUname())) {
//            err += "ログインIDを半角で入力してください。\n";
//        } else if (getUname().length() < 8) {
//            err += "ログインIDの最小長さは8桁です。\n";
//        } else if (!checkKanoUserId(getUname())) {
//            err += "ログインIDの使用可能文字は 「a-z, A-Z, 0-9, _」\n";
//        }
//        return err;
//    }
//
//    public void updateUser() {
//        LoginUser user = new LoginUser();
//        user.setId(getSelectedUser().getId());
//        user.setUname(getUname());
//        user.setUpass(encryptPassword(getUpass1()));
//        user.setIp(getIp());
//        user.setRole(getSelectedUser().getRole());
//        int m = getLoginUserService().updateUser(user);
//        if (m == 1) {
//            setNotifyUpdating("ユーザーは更新されました。");
//            setFlag(1);
//            setUname("");
//            setIp("");
//        }
//    }
//
//    public String addUser() {
//        reset();
//        String err = "";
//        // ログインIDチェック
//        err += checkUserId();
//        // パスワードチェック
//        err += checkPasswordMatching();
//        if (getRole().isEmpty()) {
//            err += "権限をチェックしてください。\n";
//        }
//
//        if (err.isEmpty()) {
//
//            LoginUser user = new LoginUser();
//
//            user.setUname(getUname());
//            user.setUpass(encryptPassword(getUpass1()));
//            user.setRole(Short.parseShort(getRole()));
//
//            try {
//                user.setIp(getIpAddress());
//            } catch (MalformedURLException e) {
//                // TODO 自動生成された catch ブロック
//                e.printStackTrace();
//            } catch (IOException e) {
//                // TODO 自動生成された catch ブロック
//                e.printStackTrace();
//            }
//            int m = getLoginUserService().adduser(user);
//            if (m == 1) {
//                setNotifyCreating("新規メンバーは追加されました。");
//                setUname("");
//                setRole("");
//            }
//        } else {
//
//            setNotifyCreating(err.replaceAll("\\n", "<br></br>"));
//        }
//        return null;
//    }
//
//    public String getIpAddress() throws MalformedURLException, IOException {
//        URL myIP = new URL("http://api.externalip.net/ip/");
//        BufferedReader in = new BufferedReader(new InputStreamReader(
//                myIP.openStream()));
//        return in.readLine();
//    }
//
//    /**
//     * パスワードをSHA1で暗号化する
//     * 
//     * @param password
//     * @return
//     */
//
//    private static String encryptPassword(String password) {
//        String sha1 = "";
//        try {
//            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
//            crypt.reset();
//            crypt.update(password.getBytes("UTF-8"));
//            sha1 = byteToHex(crypt.digest());
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//        return sha1;
//    }
//
//    private static String byteToHex(final byte[] hash) {
//        Formatter formatter = new Formatter();
//        for (byte b : hash) {
//            formatter.format("%02x", b);
//        }
//        String result = formatter.toString();
//        formatter.close();
//        return result;
//    }
//
//    public void reset() {
//        setNotifyCreating("");
//        setNotifyDeletion("");
//        setNotifyUpdating("");
//    }
//
//   
//    /**
//     * @return flag
//     */
//    public int getFlag() {
//        return flag;
//    }
//
//    public void setFlag(int flag) {
//        this.flag = flag;
//    }
//
//}
